<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <input type="text" id="ele">
    <p id="result"></p>
    <script>
        const ele = document.getElementById('ele');

        // dom 对象上有事件对应的事件方法 click
        ele.addEventListener('change',function() {
            console.log('change',this.value); // ;直接通过 this 获取值；
            result.innerHtml += this.value; // dom 元素的 id 属性的值在全局对象上可以获取?
        })

        

        // ele.dispatchEvent(new CustomEvent('change')); // dispatchEvent 用来派发事件

        const props = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype,'value');

        Object.defineProperty(HTMLInputElement.prototype,'value',{
            ...props,
            set(v) {
                let oldv = this.v;
                props.set.call(this,v); // 这里不回造成循环set吗？
                if(oldv !== v) {
                    ele.dispatchEvent(new CustomEvent('change'));
                }
            }
        })

        ele.value = 'change';

    </script>
</body>
</html>